package org.dromara.patrol.domain;

import org.dromara.common.mybatis.handler.ListInteger2ListLongTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.patrol.domain.model.ExecuteRule;
import org.dromara.patrol.domain.model.PatrolExecutors;

import java.io.Serial;
import java.util.List;

/**
 * 巡店管理-普通巡店子任务对象 patrol_subtask_common
 *
 * @author Chan
 * @date 2024-03-21
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "patrol_subtask_common", autoResultMap = true)
public class PatrolSubtaskCommon extends TenantEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 子任务id
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 创建者id（发布者id）
     */
    private Long creator;

    /**
     * 任务名称
     */
    private String name;

    /**
     * 执行人（接收者，子任务必填，主任务必null）
     */
    private Long userId;

    /**
     * 巡店任务id（巡店管理-巡店任务配置表patrol_task.task_id）
     */
    private Long taskId;

    /**
     * 实际执行开始时间
     */
    private Long startTime;

    /**
     * 实际执行结束时间
     */
    private Long finishTime;

    /**
     * 任务状态（字典表：PROCESSING 执行中，TODO 待处理，FINISH 已完成）
     * @see org.dromara.common.core.enums.patrol.TaskFinishStatus
     */
    private String status;

    /**
     * 执行人
     */
    private Long executor;

    /**
     * 周期任务id（非主任务必填）
     */
    private Long cycleTaskId;

    /**
     * 重复类型（字典表：NO_REPEAT 不重复，DAILY 每天，WEEKLY 每周，MONTHLY 每月）
     * @see org.dromara.common.core.enums.patrol.RepeatType
     */
    private String cycleType;

    /**
     * 门店id（main_task 为否必填）
     */
    private Long storeId;

    /**
     * 门店ids（main_task 为是必填）
     */
    @TableField(typeHandler = ListInteger2ListLongTypeHandler.class)
    private List<Long> storeIds;

    /**
     * 计划开始日期：2024-03-07
     */
    private String executeDateStart;

    /**
     * 计划结束日期：2024-04-30
     */
    private String executeDateEnd;

    /**
     * 计划执行时间开始：00:00:00
     */
    private String executeTimeStart;

    /**
     * 计划执行时间结束：23:59:59
     */
    private String executeTimeEnd;

    /**
     * 模板规则（字典表：COMMON 使用统一模板，CUSTOMIZE 巡店时自主选择模板，null 自主选择模板）
     */
    private String templateRule;

    /**
     * 巡店模板id（如果 template_rule=COMMON则必填）
     */
    private Long templateId;

    /**
     * 通知人ids
     */
    @TableField(typeHandler = ListInteger2ListLongTypeHandler.class)
    private List<Long> notifierIds;

    /**
     * 主任务（字典表：0 是，1 否）
     */
    private String mainTask;

    /**
     * 创建任务时间（巡店管理-巡店任务配置表patrol_task.created_time）
     */
    private Long taskCreatedTime;

    /**
     * 任务类型（字典表：PATROL_REALTIME 实时巡店，PATROL_LIVE 现场巡店，PATROL_VIDEO 录像巡店）
     * @see org.dromara.common.core.enums.patrol.TaskSubType
     */
    private String taskSubType;

    /**
     * 备注
     */
    private String remark;

    /**
     * 版本号（字典表：V1，V2）
     */
    private String ver;

    /**
     * 录像巡店开始时间（task_sub_type=PATROL_VIDEO必填）
     */
    private Long videoStartTime;

    /**
     * 录像巡店结束时间（task_sub_type=PATROL_VIDEO必填）
     */
    private Long videoEndTime;

    /**
     * 巡检计划执行人，main_task为是时必填
     */
    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private List<PatrolExecutors> patrolExecutors;

    /**
     * 任务规则同patrol_task.execute_rule
     */
    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private ExecuteRule executeRule;

    /**
     * 子任务计划结束时间戳（由execute_rule生成每个任务的结束时间）
     */
    private Long executeEndTime;

    /**
     * 子任务计划开始时间戳（由execute_rule生成每个任务的开始时间）
     */
    private Long executeStartTime;

    /**
     * 过期状态（字典表：NOT_EXPIRED 没过期，ABOUT_TO_EXPIRE 即将过期，IS_EXPIRED 已过期）
     */
    private String expiredStatus;


}
